package Gradle基础;

包装器wrapper
Gradle包装器(wrapper)使我们可以运行具有指定版本和设置的构建，而无需安装Gradle。该包装器(wrapper)可以视为Windows上的批处理脚本，以及其他操作
系统上的Shell脚本。当我们使用包装器调用Gradle时，它会自动下载并构建指定的版本。

下图展示了Gradle的工作流程:

Gradle Wrapper
对于基于UNIX的系统，可以找到 gradlew 文件，对于Windows系统，可以找到 gradlew.bat 。这些文件充当gradle命令，因此，如果计算机上未安装Gradle，
则会自动下载并安装它。

也可以定义定义包装器(wrapper)版本的任务。如果执行此任务，它将创建包装器(wrapper)并下载正确版本的Gradle。

《Gradle Wrapper好处》
以下是使用Gradle包装器的一些好处:

◾Gradle包装器可在指定的Gradle版本上标准化项目，从而使构建更可靠，更可靠。
◾Gradle包装器为不同的用户提供了相同的Gradle版本，执行环境就像更改Wrapper定义一样简单。

我们将使用第一个Gradle包装器执行以下操作:

◾设置一个新的Gradle项目并为其添加包装。
◾使用现有包装器运行项目。
◾将包装程序升级到最新版本的Gradle。

《添加Gradle包装器》
Gradle带有一个称为 wrapper 的内置任务。执行此任务后，它将在项目中生成基本包装文件。要将包装器添加到项目中，请运行包装器命令，如下所示:

gradle wrapper
输出:

Gradle Wrapper
上面的命令将为我们的项目提供包装器，并将包装器属性文件生成到目录 gradle/wrapper/gradle-wrapper.properties 中。

Gradle Wrapper
gradle-wrapper属性文件的内容如下:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME

/*distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists*/

此文件包含有关Gradle分发的以下信息:

◾托管Gradle发行版的服务器。
◾Gradle分发的类型，默认情况下，它是 bin分发，仅包含运行时，不包含示例代码和文档。
◾Gradle版本用于执行构建。默认情况下，包装器任务选择计算机的已安装版本。

在包装文件生成过程中，可以通过命令行配置上述所有方面。

以下命令用于指定用于下载和执行包装程序的Gradle版本:
--gradle-version

下面的命令用于指定用于包装器的Gradle分发类型。可用选项为 bin 和 all ，默认值为'bin':
--distribution-type

下面的命令用于将完整的URL指向Gradle发行zip文件:
--gradle-distribution-url

考虑以下示例，以解释命令行选项的用法。我们希望使用6.1版创建包装器，并使用 -all发行版来使我们的IDE启用代码补全功能并能够导航至Gradle源代码。以下命令
可以满足这些要求:

$ gradle wrapper --gradle-version 6.1 --distribution-type all
上面的命令将创建一个版本为6.1的包装器。

使用Gradle包装器
建议使用包装器执行项目的构建，以确保构建的标准，控制和可靠执行。包装程序执行构建，就像使用Gradle安装执行构建一样。根据我们的操作系统，我们可以运
行 gradlew 或 gradlew.bat 命令而不是gradle命令。以下命令演示了如何在Windows机器上对基于Java的项目使用包装器:

gradlew.bat build
输出:

Gradle Wrapper
如果Gradle发行版在计算机上不可用，包装程序将下载并提供给我们使用，并将其存储在本地文件系统中。

后续的构建调用将重用现有的本地发行版，因为Gradle属性中的发行版URL不变。

《更新Gradle包装器》
为了使软件与最新版本保持联系，更新是必需的，以便从新功能和改进中受益。我们还可以通过更改包装器属性文件中的分发URL属性来手动升级Gradle版本。

但是，建议通过包装器任务升级包装器版本，并传递指定的Gradle版本。尽管我们必须将对包装器文件的这些更改提交给版本控制，但包装器任务可确保
对Wrapper shell脚本所做的所有优化都应用于项目。

gradle包装器任务用于为指定版本生成包装器。默认情况下，它将考虑已安装的版本。

要将Gradle包装器升级到指定版本，请运行以下命令:

gradlew wrapper --gradle-version6.1
上面的命令会将项目升级到Gradle版本6.1。考虑以下输出:

Gradle Wrapper
我们可以通过执行以下命令来检查指定的版本:

gradlew -version

《自定义Gradle包装器》
Gradle的默认运行时行为相当不错，但是我们可以自定义Gradle。安全约束可能需要为使用Gradle的组织自定义包装。但是，内置包装器任务提供了许多选项来创建
我们所需的运行时行为。

假设我们不想重复使用-all选项，以便节省一些键盘笔触。为此，我们可以重新配置包装器任务。将以下代码段添加到 build.gradle文件中以自定义包装器任务:

wrapper{
    distributionType = Wrapper.DistributionType.ALL
}

